In computer graphics, tessellation is used to manage datasets of polygons (sometimes called vertex sets) presenting objects in a scene and divide them into suitable structures for rendering. Typically, three dimensional object data is tessellated into triangles, especially for real-time rendering. A key advantage of tessellation for real-time graphics is that it allows detail to be dynamically added and subtracted from a 3D mesh and its silhouette edges based on control parameters, such as camera distance.
Graphics processing typically involves coordination of two processors, a central processing unit (CPU) and a graphics processing unit (GPU). The GPU is a specialized electronic circuit designed to accelerate the creation of images in a frame buffer intended for output to a display. GPUs are used in embedded systems, mobile phones, personal computers, tablet computers, portable game devices, workstations, and game consoles. A GPU is typically designed to be efficient at manipulating computer graphics. GPU's often have a highly parallel processing architecture that makes the GPU more effective than a general-purpose CPU for algorithms where processing of large blocks of data is done in parallel.
The CPU may send the GPU instructions, commonly referred to as draw commands, that instruct the GPU to implement a particular graphics processing task, e.g., render a particular texture that has changed with respect to a previous frame in an image. These draw commands may be coordinated by the CPU with a graphics application programming interface (API) in order to issue graphics rendering commands that correspond to the state of the particular application's virtual environment.
In order to render textures for a particular program, a GPU may perform a series of processing tasks in a “graphics pipeline” to translate the visuals in the virtual environment into images that can be rendered onto a display. A typical graphics pipeline may include performing certain rendering or shading operations on virtual objects in the virtual space, transformation and rasterization of the virtual objects in the scene to produce pixel data suitable for output display, and additional rendering tasks on the pixels (or fragments) before outputting the rendered image on a display.
Virtual objects of an image are often described in virtual space in terms of shapes known as primitives, which together make the shapes of the objects in the virtual scene. For example, objects in a three-dimensional virtual world to be rendered may be reduced to a series of distinct triangle primitives having vertices defined in terms of their coordinates in three-dimensional space, whereby these polygons make up the surfaces of the objects. Each polygon may have an associated index that can be used by the graphics processing system to distinguish a given polygon from other polygons. Likewise, each vertex may have an associated index that can be used to distinguish a given vertex from other vertices. A graphics pipeline may perform certain operations on these primitives to produce visuals for the virtual scene and transform this data into a two-dimensional format suitable for reproduction by the pixels of the display. The term graphics primitive information (or simply “primitive information”), as used herein, is used to refer to data representative of a graphics primitive. Such data includes, but is not limited to, vertex information (e.g., data representing vertex positions or vertex indices) and polygon information, e.g., polygon indices and other information that associates particular vertices with particular polygons.
In existing surface subdivision software, e.g., opens source software such as OpenSubdiv, or geometry tessellation in general, geometric primitives make that up a surface and that are consumed by a tessellation unit are sometimes called “patches”. In that context, the term “polygon” or simply “triangle” is commonly used for the output of a tessellation operation and the input for subsequent processing.
As part of the graphics pipeline, the GPU may perform rendering tasks by implementing programs commonly known as shaders. A typical graphics pipeline may include vertex shaders, which may manipulate certain properties of the primitives on a per-vertex basis, as well as pixel shaders (also known as “fragment shaders”), which operate downstream from the vertex shaders in the graphics pipeline and may manipulate certain values on a per-pixel basis before transmitting the pixel data to a display. The fragment shaders may manipulate values relevant to applying textures to primitives. The pipeline may also include other shaders at various stages in the pipeline, such as geometry shaders that use the output of the vertex shaders to generate a new set of primitives, as well as compute shaders (CS) which may implemented by a GPU to perform certain other general computational tasks.
Graphical display devices having a wide field of view (FOV) have been developed. Such devices include head mounted display (HMD) devices. In an HMD device, a small display device is worn on a user's head. The display device has a display optic in front of one eye (monocular HMD) or each eye (binocular HMD). An HMD device typically includes sensors that can sense the orientation of the device and change the scene shown by the display optics as the user's head moves. Conventionally, most stages of rendering scenes for wide FOV displays are performed by planar rendering where all parts of the screen have the same number of pixels per unit area.
However, rendering for virtual reality (VR) programs, which is often performed in conjunction with HMD devices, requires a higher frame rate than conventional flat screen rendering to prevent a user from experiencing motion sickness. HMD for VR has optical systems to show rendered scenes in wide FOV for immersive experiences. While screen area around a primary gaze point requires high resolution, the areas outside the primary gaze point are observed only by the peripheral vision and can therefore maintain a lower resolution, or may contain less detail. Research has been performed that seeks to apply this idea to the pixel level (see co-pending U.S. patent application Ser. No. 14/246,066, to Mark Evan Cerny, incorporated herein by reference). However, by utilizing tessellation and a novel screen space tessellation factor calculation algorithm, it is possible to extend this idea to the geometry level. In computer graphics, tessellation is used to manage datasets of polygons (sometimes called vertex sets) presenting objects in a scene and divide them into suitable structures for rendering. Typically, three dimensional object data is tessellated into triangles, especially for real-time rendering.
A key advantage of tessellation for real-time graphics is that it allows detail to be dynamically added and subtracted from a 3D mesh and its silhouette edges based on control parameters, such as camera distance.
It is within this context that the present disclosure arises.